/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ec.socialfun.controladores;

import com.ec.socialfun.datamanager.TerminosYCondicionesDataManager;
import com.ec.socialfun.entidades.Local;
import com.ec.socialfun.entidades.Sucursal;
import com.ec.socialfun.enumeradores.ParametrosEnum;
import com.ec.socialfun.excepciones.AdministracionLocalException;
import com.ec.socialfun.excepciones.ParametroException;
import com.ec.socialfun.servicios.LocalesFacade;
import com.ec.socialfun.servicios.ParametrosFacade;
import com.ec.socialfun.servicios.SucursalFacade;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.List;
import java.util.logging.Level;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import org.jboss.logging.Logger;
import org.primefaces.event.FileUploadEvent;
import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;

/**
 *
 * @author jorge
 */
@ManagedBean
@RequestScoped
public class TerminosYCondicionesControlador extends PadreControlador {

    private static final Logger LOG = Logger.getLogger(TerminosYCondicionesControlador.class.getName());
    @EJB
    private LocalesFacade localFacade;
    @EJB
    private SucursalFacade sucursalFacade;
    @EJB
    private ParametrosFacade parametrosFacade;
    @ManagedProperty(value = "#{terminosYCondicionesDataManager}")
    private TerminosYCondicionesDataManager terminosYCondicionesDataManager;
    

    /**
     * Creates a new instance of TerminosYCondicionesControlador
     */
    public TerminosYCondicionesControlador() {
    }

    @Override
    public void iniciarDatos() {
        LOG.info("iniciar datos ");
        List<Sucursal> listaSucursales = sucursalFacade.recuperaPorUsuario(this.obtenerUsuarioLogeado());
        Local local = listaSucursales.iterator().next().getLoCodigo();
        getTerminosYCondicionesDataManager().setLocal(local);
        try {
           getTerminosYCondicionesDataManager().setTamanoArchivo(parametrosFacade.recuperaPorNombre(ParametrosEnum.TAMANO_ARCHIVO_SUBIR.getNombre()).getPaValor());
        } catch (ParametroException ex) {
            LOG.error("Error al recuperar parametro " + ParametrosEnum.TAMANO_ARCHIVO_SUBIR.getNombre() + " , detalle: " + ex);
        }
    }

    public void subirDocumento(FileUploadEvent event) {
        try {
            getTerminosYCondicionesDataManager().getLocal().setLoTerminos(event.getFile().getContents());
            localFacade.actualizarLocal(getTerminosYCondicionesDataManager().getLocal());
        } catch (AdministracionLocalException e) {
            LOG.error("Error inesperado al subir terminos y condiciones " + e);
            this.mensajeError("Error al subir terminos y condiciones ");
        }
    }

    public boolean isTerminosYCondicionesCargados() {
        if (getTerminosYCondicionesDataManager().getLocal().getLoTerminos() == null
                || getTerminosYCondicionesDataManager().getLocal().getLoTerminos().length == 0) {
            return false;
        }
        return true;
    }

    public StreamedContent getArchivoDescargaTerminosYCondiciones() {
        LOG.info("getArchivoDescargaTerminosYCondiciones");
        if (isTerminosYCondicionesCargados()) {
            byte[] arch = getTerminosYCondicionesDataManager().getLocal().getLoTerminos();
            InputStream iestream = new ByteArrayInputStream(arch);
            return new DefaultStreamedContent(iestream, "application/pdf", "terminos_y_condiciones.pdf");
        }
        return null;
    }

    public TerminosYCondicionesDataManager getTerminosYCondicionesDataManager() {
        return terminosYCondicionesDataManager;
    }

    public void setTerminosYCondicionesDataManager(TerminosYCondicionesDataManager terminosYCondicionesDataManager) {
        this.terminosYCondicionesDataManager = terminosYCondicionesDataManager;
    }
}
